From ee3fd57acd903f1b302290a0a1019d3db95aa259 Mon Sep 17 00:00:00 2001 From: Wei Liu Date: Thu, 23 Jun 2016 16:10:27 +0100 Subject: [PATCH] xen: add warning infrastructure Use an array to keep track of warning text, provide a function to add warning text to track. Print warnings (if any) in console_endboot. Signed-off-by: Wei Liu Acked-by: Jan Beulich Reviewed-by: Andrew Cooper --- xen/common/Makefile | 1 + xen/common/warning.c | 55 ++++++++++++++++++++++++++++++++++++++ xen/drivers/char/console.c | 3 +++ xen/include/xen/warning.h | 7 +++++ 4 files changed, 66 insertions(+) create mode 100644 xen/common/warning.c create mode 100644 xen/include/xen/warning.h diff --git a/xen/common/Makefile b/xen/common/Makefile index e9893e2e6b..dbf00c639d 100644 --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -59,6 +59,7 @@ obj-y += vm_event.o obj-y += vmap.o obj-y += vsprintf.o obj-y += wait.o +obj-bin-y += warning.init.o obj-$(CONFIG_XENOPROF) += xenoprof.o obj-y += xmalloc_tlsf.o diff --git a/xen/common/warning.c b/xen/common/warning.c new file mode 100644 index 0000000000..8bdd2991e7 --- /dev/null +++ b/xen/common/warning.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include + +#define WARNING_ARRAY_SIZE 20 +static unsigned int __initdata nr_warnings; +static const char *__initdata warnings[WARNING_ARRAY_SIZE]; + +void __init warning_add(const char *warning) +{ + if ( nr_warnings >= WARNING_ARRAY_SIZE ) + panic("Too many pieces of warning text."); + + warnings[nr_warnings] = warning; + nr_warnings++; +} + +void __init warning_print(void) +{ + unsigned int i, j; + + if ( !nr_warnings ) + return; + + printk("***************************************************\n"); + + for ( i = 0; i < nr_warnings; i++ ) + { + printk("%s", warnings[i]); + printk("***************************************************\n"); + } + + for ( i = 0; i < 3; i++ ) + { + printk("%u... ", 3 - i); + for ( j = 0; j < 100; j++ ) + { + process_pending_softirqs(); + mdelay(10); + } + } + printk("\n"); +} + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index f4f61412d4..ac21caffd7 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include /* for do_console_io */ @@ -796,6 +797,8 @@ void __init console_endboot(void) printk(" (Rate-limited: %s)", loglvl_str(xenlog_guest_upper_thresh)); printk("\n"); + warning_print(); + if ( opt_sync_console ) { printk("**********************************************\n"); diff --git a/xen/include/xen/warning.h b/xen/include/xen/warning.h new file mode 100644 index 0000000000..c0661d5140 --- /dev/null +++ b/xen/include/xen/warning.h @@ -0,0 +1,7 @@ +#ifndef _WARNING_H_ +#define _WARNING_H_ + +void warning_add(const char *warning); +void warning_print(void); + +#endif -- 2.30.2